/**
 * jims
 */
package com.jims.master.modules.sys.service;

import com.jims.master.common.service.CrudService;
import com.jims.master.common.utils.Entrypt;
import com.jims.master.modules.base.user.entity.MasterBaseinfo;
import com.jims.master.modules.base.user.entity.MasterContactinfo;
import com.jims.master.modules.base.user.service.MasterBaseinfoService;
import com.jims.master.modules.base.user.service.MasterContactinfoService;
import com.jims.master.modules.sys.dao.SysLoginNameDao;
import com.jims.master.modules.sys.entity.SysLoginName;
import com.jims.master.modules.sys.utils.UserUtils;
import com.jims.master.modules.sys.utils.netease.NetEaseServerAPI;
import com.jims.master.modules.sys.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.util.List;
import java.util.Map;


/**
 * 登陆用户名Service
 * @author CTQ
 * @version 2017-02-17
 */
@Service
@Transactional(readOnly = true)
public class SysLoginNameService extends CrudService<SysLoginNameDao, SysLoginName> {
    @Autowired
    private SysLoginNameDao sysLoginNameDao;
    @Autowired
    private UserService userService;
   /* @Autowired
    private MasterBaseinfoService masterBaseinfoService;
    @Autowired
    private MasterContactinfoService masterContactinfoService;*/


    public String findValidate(String loginName){
        return sysLoginNameDao.findValidate(loginName);
    }

    /**
     * user注册保存基本信息
     * @param sysLoginName 登录信息
     * @return sln 看是否成功
     */
    @Transactional(readOnly = false)
    public int userRegister(SysLoginName sysLoginName) throws IOException {
        User user=sysLoginName.getUser();
        user.setPassword(Entrypt.entryptPassword(user.getPassword()));

        userService.save(user);
//        创建网易账号
        String httpEntityStr = NetEaseServerAPI.createUser((user.getId()).substring(0,32),user.getName());
        Map<Object,Object> map=NetEaseServerAPI.toMap(httpEntityStr);
        boolean flag=NetEaseServerAPI.isRegistNetease(map);
//          true表示原来未注册，刚注册成功
        String token=null;
        if(flag){
//          已经注册的用户token是否为空，为空更新
            token=NetEaseServerAPI.getToken(map);
            user.setToken(token);
//          把生成的token保存到user表中
            boolean isUpdate=updateNeteaseUserInfo(user);
            if(isUpdate){
                user.setNeteaseInfoFlag("1");
            }
            userService.updateToken(user);
        }
        /*if(user.getOpenid()!=null||user.getQqOpenid()!=null){
            userService.updateOpenid(user);
        }*/
        return this.save(sysLoginName);
    }
    /**
     * 普通用户改变成医生，更新user变中的信息
     * @param user 跟新后的user对象
     * @return int
     */
    @Transactional(readOnly = false)
    public int chageDoctor(User user){
        return userService.update(user);
    }
    /**
     * 根据id查询对象
     * @param id
     * @return SysLoginName
     */
    public SysLoginName findByID(String id){return this.dao.get(id);}
    /**
     * 根据id查询对象
     * @param userId
     * @return list
     */
    public List<SysLoginName> findByUserId(String userId){return this.dao.findByUserId(userId);}


    /**
     * 更新对象
     * @param sysLoginName
     * @return SysLoginName
     */
    public int update(SysLoginName sysLoginName){return this.dao.update(sysLoginName);}
    /**
     * 验证验证码
     * @Params: loginName
     * @Params: password
     * @Return:
     */
    @Transactional(readOnly = false)
    public int retrievePassword(String loginName, String password){
        String userId=this.dao.findValidate(loginName);
        int i=0;
        if(userId ==null|| userId.equals("")){
            i=0;
        }else{
            User user=userService.get(userId);
            user.setPassword(Entrypt.entryptPassword(password));
            i=userService.updatePasswordById(user);
        }
        return i;
    }
    /**
     * 更新用户名片
     * @param  user
     * @return boolean
     */
   public boolean updateNeteaseUserInfo(User user){
       if(user.getMasterBaseinfo()!=null) {
           MasterBaseinfo masterBaseinfo = user.getMasterBaseinfo();
//                masterBaseinfoService.get(user.getPersionId());
           MasterContactinfo masterContactinfo = masterBaseinfo.getMasterContactinfo();
//                masterContactinfoService.getContactinfoByBasId(masterBaseinfo.getId());
//		accid       [云信ID，最大长度32字节，必须保证一个APP内唯一（只允许字母、数字、半角下划线_、@、半角点以及半角-组成，不区分大小写，会统一小写处理）]
           String accid = "";
//		数据库user表中id不一样长
           if (user.getId().length() < 32) {
               accid = user.getId();
           } else {
               accid = (user.getId()).substring(0, 32);
           }
//		name        [云信ID昵称，最大长度64字节，用来PUSH推送时显示的昵称]
           String name = masterBaseinfo.getName();
//		icon        [用户icon，最大长度256字节]
           String icon = masterBaseinfo.getHeadPath();
//		sign        [用户签名，最大长度256字节]
           String sign = "关注健康，关爱生命！";
//		[用户email，最大长度64字节]
           String email = masterContactinfo.getEmail();
//		birth       [用户生日，最大长度16字节]
           String birth = null;
//		mobile      [用户mobile，最大长度32字节]
           String mobile = masterContactinfo.getMobilePhone();
//		gender      [用户性别，0表示未知，1表示男，2女表示女，其它会报参数错误]
           String sex = masterBaseinfo.getSex();
           int gender = 0;
           if (sex == null || "".equals(sex)) {
               gender = 0;
           } else {
               gender = Integer.parseInt(sex);
           }
           String httpEntity=NetEaseServerAPI.updateUserInfo(accid,name,icon,sign,email,birth,mobile,gender);
           return NetEaseServerAPI.isRegistNetease(NetEaseServerAPI.toMap(httpEntity));
       }
        return false;
    }
}